"use server";

import { db } from "~/server/db";
import { sql } from "drizzle-orm";

/**
 * 数据库迁移 - 添加文档类型字段
 * 
 * 此函数执行数据库迁移，向documents表添加document_type字段，
 * 并更新主键为包含document_type的复合主键。
 */
export async function migrateDocumentType() {
  try {
    console.log("开始数据库迁移 - 添加文档类型字段...");
    
    // 检查document_type列是否已存在
    const checkColumnExists = await db.execute(sql`
      SELECT column_name 
      FROM information_schema.columns 
      WHERE table_name = 'codemariner_documents' 
      AND column_name = 'document_type'
    `);
    
    // 检查结果集是否为空
    const columnExists = Array.isArray(checkColumnExists) && checkColumnExists.length > 0;
    
    if (!columnExists) {
      // 添加document_type列，默认值为'overview-doc'
      await db.execute(sql`
        ALTER TABLE codemariner_documents 
        ADD COLUMN document_type VARCHAR(50) NOT NULL DEFAULT 'overview-doc'
      `);
      console.log("成功添加document_type列");
      
      // 删除旧的主键约束
      await db.execute(sql`
        ALTER TABLE codemariner_documents 
        DROP CONSTRAINT IF EXISTS codemariner_documents_username_repo_pk
      `);
      console.log("成功删除旧的主键约束");
      
      // 添加新的包含document_type的主键约束
      await db.execute(sql`
        ALTER TABLE codemariner_documents 
        ADD CONSTRAINT codemariner_documents_username_repo_document_type_pk 
        PRIMARY KEY (username, repo, document_type)
      `);
      console.log("成功添加新的主键约束");
      
      return { success: true, message: "成功添加文档类型字段并更新主键约束" };
    } else {
      console.log("文档类型字段已存在，无需迁移");
      return { success: true, message: "文档类型字段已存在，无需迁移" };
    }
  } catch (error) {
    console.error("迁移失败:", error);
    return { 
      success: false, 
      message: "迁移失败", 
      error: error instanceof Error ? error.message : String(error) 
    };
  }
} 